package org.ws.edu.task1.ikhmyz;

import org.ws.edu.task1.ICalculator;

public class CalculatorKHMZ implements ICalculator {

	@Override
	public int sum(int a1, int a2) {
		// TODO [DK] 21.02.2012: Можно избавиться от переменной z. Перенеси операцию сложения к оператору return.
		int z;

		z = a1 + a2;

		return z;

	}

	public int subtract(int a1, int a2) {
		// TODO [DK] 21.02.2012: Можно избавиться от переменной z. Перенеси операцию вычитания к оператору return.
		int z;

		z = a1 - a2;

		return z;

	}

	@Override
	public long factorial(int n) {

		long z = 1;
		// TODO [DK] 21.02.2012: Лучше использовать ++i, т.к. в твоей реализации будет лишняя итерация цикла. i++ будет
		// использоваться увеличенной на 1 только в след итерации, следовательно в первой итерации будет просто
		// умножаться 1*1, что смысла то и не несёт
		for (int i = 1; i <= n; i++) {

			z *= i;
		}

		return z;

	}

	public int multiply(int a1, int a2) {
		// TODO [DK] 21.02.2012: Можно избавиться от переменной z. Перенеси операцию умножения к оператору return.
		int z;

		z = a1 * a2;

		return z;

	}

	public double divide(int a1, int a2) {
		// TODO [DK] 21.02.2012: Можно избавиться от переменной z. Перенеси операцию деления к оператору return.
		// TODO [DK] 21.02.2012: Лучше делить уже double переменные, тоесть преобзовать их до деления,т.к в твоей
		// реализации получится уже округлённый результат на выходе.
		double z;

		z = (double) a1 / a2;

		return z;
	}

	public long exp(int a1, int a2) {
		// TODO [DK] 21.02.2012: Раставь скобочки в if-ах, это улучшает читабельность кода, и соответствует code
		// convenient
		// TODO [DK] 21.02.2012: Можно избавиться от переменной z если использовать несколько return, тоесть выдавать
		// данные из метода в каждом блоке if-else
		// TODO [DK] 21.02.2012: Можно использовать уже готовый статический метод Math.pow(double a, double b); см.
		// сслыку http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Math.html#pow(double, double)
		long z = a1;

		if (a2 == 1)

			z = a1;

		else

			for (int i = 1; i < a2; i++) {

				z *= a1;

			}

		return z;

	}

	public double sqrt(int n) {
		// TODO [DK] 21.02.2012: Можно избавиться от переменной z. Перенеси операцию нахождения корня к оператору
		// return.

		double z;

		z = Math.sqrt(n);

		return z;

	}

}
